package com.itheima.health.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.health.dao.MemberDao;
import com.itheima.health.dao.OrderDao;
import com.itheima.health.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.HashMap;
import java.util.Map;

/**
 * @program: itcast_health
 * @create: 2019-10-30 16:16
 * @author: li he
 * @description:
 */
/*
        reportData:{
                 reportDate                    :null,  统计时间（现在）
                 todayNewMember                :0,  今日新增会员数
                 totalMember                   :0,     总会员数
                 thisWeekNewMember             :0,  本周新增会员数（本周一 以后）
                 thisMonthNewMember            :0, 本月新增会员数(本月1号以后)
                 todayOrderNumber              :0,   今日预约数（今日应该到诊人数）
                 todayVisitsNumber             :0,   今日到诊数(今日实际来了多少人)
                 thisWeekOrderNumber           :0,  本周预约人数(范围是周一到周日)
                 thisWeekVisitsNumber          :0, 本周的实际到诊数（周一以后）
                 thisMonthOrderNumber          :0,  本月预约人数（范围：1号到本月最后一天）
                 thisMonthVisitsNumber         :0, 本月的实际到诊人数（1号以后）
                 hotSetmeal                   （热门套餐（取预约人数最多的前四个）） :[
                 {name:'阳光爸妈升级肿瘤12项筛查（男女单人）体检套餐',setmeal_count:200,proportion:0.222},
                 {name:'阳光爸妈升级肿瘤12项筛查体检套餐',setmeal_count:200,proportion:0.222}
]},*/
@Service
public class ReportServiceImpl implements ReportService {

    @Autowired
    private MemberDao memberDao;
    @Autowired
    private OrderDao orderDao;


    @Override
    public Map<String, Object> getBusinessReportData() throws Exception {
        //今天
        String today = DateUtils.parseDate2String(DateUtils.getToday());
        //本周
        String monday = DateUtils.parseDate2String(DateUtils.getThisWeekMonday());
        String sunday = DateUtils.parseDate2String(DateUtils.getSundayOfThisWeek());
        //本月
        String startMonth = DateUtils.parseDate2String(DateUtils.getFirstDay4ThisMonth());
        String endMonth = DateUtils.parseDate2String(DateUtils.getLastDay4ThisMonth());

        Map<String,Object> reportData = new HashMap<>();
        reportData.put("reportDate",today);//统计时间（现在）
        reportData.put("todayNewMember",memberDao.findTodayNewMember(today));//今日新增会员数
        reportData.put("totalMember",memberDao.findTotalMember());// 总会员数
        reportData.put("thisWeekNewMember",memberDao.findNewMemberByDate(monday));// 本周新增会员数（本周一 以后）
        reportData.put("thisMonthNewMember",memberDao.findNewMemberByDate(startMonth));// 本月新增会员数(本月1号以后)
        reportData.put("todayOrderNumber",orderDao.findTodayOrderNumber(today));//今日预约数（今日应该到诊人数）
        reportData.put("todayVisitsNumber",orderDao.findTodayVisitsNumber(today));// 今日到诊数(今日实际来了多少人)
        reportData.put("thisWeekOrderNumber",orderDao.findOrderNumberByScopeDate(monday,sunday));//本周预约人数(范围是周一到周日)
        reportData.put("thisWeekVisitsNumber",orderDao.findVisitsNumberByDate(monday));// 本周的实际到诊数（周一以后）
        reportData.put("thisMonthOrderNumber",orderDao.findOrderNumberByScopeDate(startMonth,endMonth));//本月预约人数（范围：1号到本月最后一天）
        reportData.put("thisMonthVisitsNumber",orderDao.findVisitsNumberByDate(startMonth));//本月的实际到诊人数（1号以后）
        reportData.put("hotSetmeal",orderDao.findHotSetmeal());//热门套餐（取预约人数最多的前四个）

        return reportData;
    }
}